package com.xx.baogao.dame;

import org.apache.poi.xwpf.usermodel.*;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

public class SampleFormFiller {
    public static void main(String[] args) {
        // 模板文件路径和输出路径
        String templatePath = "E:\\word\\所有附件：lims实验室\\样品检测流转单.docx";
        String outputPath = "E:\\word\\所有附件：lims实验室\\已填充的样品检测流转单.docx";

        // 准备假数据（使用${}占位符对应的数据）
        Map<String, String> fakeData = new HashMap<>();
        fakeData.put("projectNo", "JC202408001"); // 项目编号
        fakeData.put("sampleManager", "张三");     // 样品管理员
        fakeData.put("entrustingUnit", "XX环境监测有限公司"); // 委托单位
        fakeData.put("handoverDate", "2024-08-01"); // 交接日期
        fakeData.put("sampleCheck", "外观完好，标签清晰，符合检测要求"); // 样品综合性检查
        fakeData.put("deadlineDate", "2024-08-10"); // 要求完成日期

        // 单一样品的假数据（表格中横向列）
        fakeData.put("testType", "常规检测");       // 检测类别
        fakeData.put("sampleNo", "YP202408001-001"); // 样品编号
        fakeData.put("testItem", "重金属含量、pH值"); // 检测项目
        fakeData.put("quantity", "3份");            // 数量
        fakeData.put("storageCondition", "4℃冷藏"); // 保存条件
        fakeData.put("samplingTime", "2024-07-30 09:30"); // 采样时间
        fakeData.put("analyst", "李四");            // 分析人员
        fakeData.put("testStandard", "GB/T 5750-2023"); // 检测依据
        fakeData.put("sampleDisposal", "检测后保存3个月，统一销毁"); // 试采样品处理
        fakeData.put("subsamplingTime", "2024-08-01 14:20"); // 分样时间

        try {
            // 读取模板文档
            XWPFDocument doc = new XWPFDocument(new FileInputStream(templatePath));

            // 1. 填充表格中的占位符（假设文档中主要数据在第一个表格）
            XWPFTable table = doc.getTables().get(0);
            for (XWPFTableRow row : table.getRows()) {
                for (XWPFTableCell cell : row.getTableCells()) {
                    for (XWPFParagraph para : cell.getParagraphs()) {
                        replacePlaceholder(para, fakeData);
                    }
                }
            }

            // 2. 填充分样时间（假设在表格外的段落中）
            for (XWPFParagraph para : doc.getParagraphs()) {
                replacePlaceholder(para, fakeData);
            }

            // 输出填充后的文档
            FileOutputStream out = new FileOutputStream(outputPath);
            doc.write(out);
            out.close();
            doc.close();
            System.out.println("假数据填充完成，文件保存至：" + outputPath);

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    // 替换段落中的${key}占位符为对应的值
    private static void replacePlaceholder(XWPFParagraph para, Map<String, String> data) {
        String text = para.getText();
        for (Map.Entry<String, String> entry : data.entrySet()) {
            String placeholder = "${" + entry.getKey() + "}";
            if (text.contains(placeholder)) {
                // 清空原有内容并替换
                para.removeRun(0);
                XWPFRun run = para.createRun();
                run.setText(text.replace(placeholder, entry.getValue()));
            }
        }
    }
}